import paho.mqtt.client as mqtt #导入mqtt客户端模块
import time #代码中添加等待时间，确保异步操作完成

# MQTT Broker参数
BROKER_ADDRESS = "81.70.146.224" #服务器地址
PORT = 1883 #端口号
TOPIC = "nzzn/test" #目标主题
MESSAGE = "Hello World" #消息内容
QOS = 1 #服务质量等级

# 连接成功的回调函数，成功连接会自动调用
def on_connect(client, userdata, flags, rc): 
    if rc == 0:
        print("成功连接到MQTT Broker")
    else:
        print(f"连接失败，返回码: {rc}")

# 消息发送成功的回调函数，成功自动调用
def on_publish(client, userdata, mid):
    print("消息发送成功")

# 创建MQTT客户端
client = mqtt.Client(client_id="PythonPublisher")

# 设置回调函数
client.on_connect = on_connect
client.on_publish = on_publish

# 如果需要用户名和密码，可以取消注释并修改以下两行
client.username_pw_set("root", "NZ852ijd169@")

try: #开始异常捕获
    # 连接到Broker
    client.connect(BROKER_ADDRESS, PORT, keepalive=60) #keepalive是心跳每秒60次
    
    # 启动网络循环
    client.loop_start() #启动一个独立的线程来处理网络事件（比如接收消息、发送确认）
    
    # 发送消息
    info = client.publish(TOPIC, MESSAGE, qos=QOS)
    
    # 等待消息发送完成
    info.wait_for_publish() #阻塞等待，直到消息发布完成
    
    # 短暂等待以确保回调函数执行
    time.sleep(1) #暂停1秒
    
    # 停止循环并断开连接
    client.loop_stop()
    client.disconnect()
    print("已断开连接")

except Exception as e: #捕获任何异常（如网络错误、连接超时）
    print(f"发生错误: {e}")